package com.atguigu.lease.web.admin.custom.converter;

import com.atguigu.lease.model.enums.BaseEnum;
import com.atguigu.lease.model.enums.ItemType;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.converter.ConverterFactory;
import org.springframework.stereotype.Component;

/**
 * ClassName: StringToIBaseEnumConverter
 * Package: com.atguigu.lease.web.admin.custom.converter
 * Description:
 * 这个类是通用的类型转换工厂
 *
 * @Author 咚咚小圆帽
 * @Create 2025/1/21 16:59
 * @Version 1.0
 */
@Component
public class StringToBaseEnumConverterFactory implements ConverterFactory<String, BaseEnum> {

    @Override
    public <T extends BaseEnum> Converter<String, T> getConverter(Class<T> targetType) {

        return new Converter<String, T>() {
            @Override
            public T convert(String source) {

                //getEnunConstants()方法，获取枚举类的Class对象中的所有枚举数组常量
                for (T value : targetType.getEnumConstants()) {
                    //让value中的code值与source进行对比，如果相等就成功了。
                    //注意：code是Integer类型，source是String类型
                    if (value.getCode().equals(Integer.valueOf(source))) {
                        return value;
                    }
                }
                throw new IllegalArgumentException("传递进来的参数非法");
            }
        };

        /*return source->{
            //getEnunConstants()方法，获取枚举类的Class对象中的所有枚举数组常量
            for (T value : targetType.getEnumConstants()) {
                //让value中的code值与source进行对比，如果相等就成功了。
                //注意：code是Integer类型，source是String类型
                if (value.getCode().equals(Integer.valueOf(source))) {
                    return value;
                }
            }
            throw new IllegalArgumentException("传递进来的参数非法");
        };*/

    }

}
